import request from "@/utils/request";

const DATASOURCE_BASE_URL = "/wz/datasource";

class DatasourceAPI {
  /**
   * 获取数据源列表
   * @param queryParams
   * @returns
   */
  static getPage(queryParams: DatasourcePageQuery) {
    return request<any, PageResult<DatasourcePageVO[]>>({
      url: DATASOURCE_BASE_URL + `/page`,
      method: "get",
      params: queryParams,
    });
  }

  /**
   * 获取数据源集合
   * @param queryParams
   * @returns
   */
  static getList() {
    return request<any, ResponseData<DatasourcePageVO[]>>({
      url: DATASOURCE_BASE_URL + `/list`,
      method: "get",
    });
  }

  /**
   * 获取数据源集合
   * @param queryParams
   * @returns
   */
  static getTableList(id: string) {
    return request<any, ResponseData<DatasourcePageVO[]>>({
      url: DATASOURCE_BASE_URL + `/table/list?id=${id}`,
      method: "get",
    });
  }

  /**
   *
   * @param id 测试数据源
   * @returns
   */
  static test(id: number) {
    return request({
      url: DATASOURCE_BASE_URL + `/test?id=${id}`,
      method: "get",
    });
  }

  /**
   * 获取数据源表单数据
   *
   * @param id 菜单ID
   */
  static getFormData(id: number) {
    return request<any, DatasourceForm>({
      url: DATASOURCE_BASE_URL + `/detail?id=${id}`,
      method: "get",
    });
  }

  /**
   * 删除数据源
   * @param ids
   * @returns
   */
  static deleteByIds(ids: string) {
    return request({
      url: DATASOURCE_BASE_URL + `/remove?ids=${ids}`,
      method: "post",
    });
  }
}

export default DatasourceAPI;

/**
 * 数据源分页查询对象
 */
export interface DatasourcePageQuery extends PageQuery {
  /** 搜索关键字 */
  keywords?: string;
  dbType?: string;
  connName?: string;
}

/**
 * 数据源分页对象
 */
export interface DatasourcePageVO {
  id?: number;
  /**
   * 数据库类型
   */
  dbType?: string;
  /**
   * 连接名
   */
  connName?: string;
  /**
   * URL
   */
  connUrl?: string;
  /**
   * 用户名
   */
  username?: string;
  /**
   * 密码
   */
  password?: string;
  /**
   * 创建时间
   */
  createTime?: string;
}

/**
 * 数据源表单对象
 */
export interface DatasourceForm {
  /**
   * 主键
   */
  id?: number;
  /**
   * 数据库类型
   */
  dbType?: string;
  /**
   * 连接名
   */
  connName?: string;
  /**
   * URL
   */
  connUrl?: string;
  /**
   * 用户名
   */
  username?: string;
  /**
   * 密码
   */
  password?: string;
  /**
   * 创建时间
   */
  createTime?: string;
}

export interface TableVO {
  id?: number;
  /**
   * 表名
   */
  tableName?: string;
  /**
   * 实体类名称
   */
  className?: string;
  /**
   * 功能名
   */
  tableComment?: string;
  /**
   * 项目包名
   */
  packageName?: string;
  /**
   * 项目版本号
   */
  version?: string;
  /**
   * 作者
   */
  author?: string;
  /**
   * 邮箱
   */
  email?: string;
  /**
   * 生成方式  1：zip压缩包   2：自定义目录
   */
  generatorType?: number;
  /**
   * 后端生成路径
   */
  backendPath?: string;
  /**
   * 前端生成路径
   */
  frontendPath?: string;
  /**
   * 模块名
   */
  moduleName?: string;
  /**
   * 功能名
   */
  functionName?: string;
  /**
   * 表单布局
   */
  formLayout?: number;
  /**
   * 数据源ID
   */
  datasourceId?: number;
  /**
   * 基类ID
   */
  baseclassId?: number;
  /**
   * 创建时间
   */
  createTime?: string;
  /**
   * 字段列表
   */
  fieldList?: GenTableFieldVO[];
}

export interface GenTableFieldVO {
  id?: number;
  /**
   * 表ID
   */
  tableId?: number;
  /**
   * 字段名称
   */
  fieldName?: string;
  /**
   * 排序
   */
  sort?: number;
  /**
   * 字段类型
   */
  fieldType?: string;
  /**
   * 字段说明
   */
  fieldComment?: string;
  /**
   * 属性名
   */
  attrName?: string;
  /**
   * 属性类型
   */
  attrType?: string;
  /**
   * 属性包名
   */
  packageName?: string;
  /**
   * 自动填充
   */
  autoFill?: string;
  /**
   * 主键 0：否  1：是
   */
  primaryPk?: boolean;
  /**
   * 基类字段 0：否  1：是
   */
  baseField?: boolean;
  /**
   * 表单项 0：否  1：是
   */
  formItem?: boolean;
  /**
   * 表单必填 0：否  1：是
   */
  formRequired?: boolean;
  /**
   * 表单类型
   */
  formType?: string;
  /**
   * 表单字典类型
   */
  formDict?: string;
  /**
   * 表单效验
   */
  formValidator?: string;
  /**
   * 列表项 0：否  1：是
   */
  gridItem?: boolean;
  /**
   * 列表排序 0：否  1：是
   */
  gridSort?: boolean;
  /**
   * 查询项 0：否  1：是
   */
  queryItem?: boolean;
  /**
   * 查询方式
   */
  queryType?: string;
  /**
   * 查询表单类型
   */
  queryFormType?: string;
}
